package com.xxzuibang.day11.房屋出租系统项目.view;

import com.xxzuibang.day11.房屋出租系统项目.domain.House;
import com.xxzuibang.day11.房屋出租系统项目.service.HouseService;
import com.xxzuibang.day11.房屋出租系统项目.utils.Utility;


/*
1.显示界面
2.接收用户的收入
3.调用houseService完成对房屋信息的各种操作
 */
public class HouseView {
    private boolean loop = true;//控制显示菜单，当loop是false的时候退出
    public char key = ' ';//接收用户的选择，
    //调用houseservice完成对用户的各种操作
    private HouseService houseService = new HouseService(10);//假定数组的大小为10


    //根据id修改房屋信息
    public void update() {
        System.out.println("======================修改房屋信息=====================");
        System.out.println("请选择待修改的房屋的编号：（-1表示退出）");
        int updateId = Utility.readInt();//调用工具类得到用户输入的id保存为对象updateId
        //如果用户输入了-1，输出用户放弃修改，直接退出这个方法
        if (updateId == -1) {
            System.out.println("============你放弃了修改房屋信息============");
            return;
        }
        //根据输入得到updateId,查找对象
        //调用service里的findById方法，传入updateId
        House house = houseService.findById(updateId);
        //如果没有找到id，返回提示信息编号不存在
        if (house == null) {
            System.out.println("=================修改的房屋信息编号不存在===================");
            return;
        }
        System.out.println("姓名(" + house.getName() + "):");
        //完成每个数据的修改操作，先获得用户输入的信息，比对原来的信息，将修改过的覆盖掉原来的信息
        String name = Utility.readString(8, "");//如果用户直接回车，表示不修改该信息默认“ ”
        if (!"".equals(name)) {//修改
            house.setName(name);
        }
        System.out.println("电话(" + house.getPhone() + "):");
        String phone = Utility.readString(12, "");
        if (!"".equals(phone)) {
            house.setPhone(phone);
        }
        System.out.println("地址(" + house.getAddress() + "):");
        String address = Utility.readString(18, "");
        if (!"".equals(address)) {
            house.setAddress(address);
        }
        System.out.println("租金(" + house.getRent() + "):");
        int rent = Utility.readInt(-1);
        //对于int型的数据，如果用户输入的租金不是-1，就可以修改
        if (rent != -1) {
            house.setRent(rent);
        }
        System.out.println("状态(" + house.getState() + "):");
        String state = Utility.readString(3, "");
        if (!"".equals(state)) {
            house.setState(state);
        }
        System.out.println("====================修改成功========================");
    }

    //根据id查找房屋信息
    public void findHouse() {
        System.out.println("======================查找房屋信息====================");
        System.out.println("请输入要查找的id");
        int findId = Utility.readInt();//调用工具类获取用户输入的int型编号
        //调用service里面的findById方法
        House house = houseService.findById(findId);
        //如果house里面有房源，显示找到的信息，没有输出提示
        if (house != null) {
            System.out.println(house);
        } else {
            System.out.println("没有查找到相应的信息，id不存在");
        }
    }

    //完成退出确认
    public void exit() {
        //这里我们使用方法提供的方法，完成确认
        char c = Utility.readConfirmSelection();
        if (c == 'Y') {
            loop = false;
        }
    }


    //编写delHouse（）接受用户的id，调用Service的del方法
    public void delHouse() {
        System.out.println("===================删除房屋信息======================");
        System.out.println("请输入待删除房屋的编号（-1退出）");
        int delId = Utility.readInt();//调用工具类获得用户输入的想要删除的房源id保存为delId
        //如果用户输入了-1表示放弃删除
        if (delId == -1) {
            System.out.println("=====================放弃删除房屋信息====================");
            return;
        }
        //询问用户是不是确认删除，调用工具类获得char型的结果保存为choice
        char choice = Utility.readConfirmSelection();//注意该方法本身就有循环判断的逻辑，必须输入y或者n，否则是出不来的
        if (choice == 'Y') {//真的删除
            //如果选择了y，调用service里的del方法，传入delId
            if (houseService.del(delId)) {
                System.out.println("===================删除房屋成功======================");
            } else {
                System.out.println("========================编号不存在删除失败=======================");
            }
        } else {
            System.out.println("=====================放弃删除房屋信息====================");
        }

    }


    public void addHouse() {
        System.out.println("========================添加房屋=======================");
        System.out.println("姓名：");
        String name = Utility.readString(8);//调用工具类获取用户输入姓名不得超过8个字符
        System.out.println("电话：");
        String phone = Utility.readString(12);//调用工具类获取用户输入电话不得超过12个字符
        System.out.println("地址：");
        String address = Utility.readString(16);//调用工具类获取用户输入地址不得超过16个字符
        System.out.println("月租：");
        int rent = Utility.readInt();//调用工具类获取用户如输入租金
        System.out.println("状态：");
        String state = Utility.readString(3);//调用工具类获取用户输入状态信息（未出租/已出租）
        //创建一个新的House对象,注意id是系统分配的，用户不能输入
        House newHouse = new House(0, name, phone, address, rent, state);
        //调用service里的add方法，成功显示添加成功
        if (houseService.add(newHouse)) {
            System.out.println("=====================房屋添加成功========================");
        } else {
            System.out.println("====================房屋添加失败=========================");
        }
    }

    //编写listHouse显示房屋列表
    public void listHouse() {
        System.out.println("========================房屋列表============================");
        System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态（未出租/已出租）");
        House[] houses = houseService.list();//调用service里面的list方法得到所有房屋的信息，存在数组里
        for (int i = 0; i < houses.length; i++) {//这里的问题，遍历房屋信息数组，如果为空，退出，有就输出展示所有的房屋信息
            if (houses[i] == null) {
                break;
            }
            System.out.println(houses[i] + " ");
        }
        System.out.println("========================房屋列表显示完毕============================");
    }

    //显示主菜单
    public void mainMenu() {
        do {
            System.out.println("==================房屋出租系统菜单===================");
            System.out.println("\t\t\t\t\t1.新 增 房 源");
            System.out.println("\t\t\t\t\t2.查 找 房 源");
            System.out.println("\t\t\t\t\t3.删 除 房 源");
            System.out.println("\t\t\t\t\t4.修 改 房 源");
            System.out.println("\t\t\t\t\t5.显 示 房 源");
            System.out.println("\t\t\t\t\t6.退 出 系 统");
            System.out.println("请输入你的选择(1-6):");
            key = Utility.readChar();//使用工具类接收用户的char型输入
            switch (key) {
                case '1':
                    //添加房源信息
                    addHouse();
                    break;
                case '2':
                    //根据编号查找房源
                    findHouse();
                    break;
                case '3':
                    //删除房源
                    delHouse();
                    break;
                case '4':
                    //修改房源
                    update();
                    break;
                case '5':
                    //显示房源信息
                    listHouse();
                    break;
                case '6':
                    //退出
                    exit();
                    break;
            }
        } while (loop);
    }
}
